﻿using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace AccidentCards
{
    class Dictionary
    {
        public enum DictCategories
        {
            FirstCategory = 0,
            AccidentMemberTypes = FirstCategory,
            AccidentTypes,
            OperationTypes,
            StreetNames,
            StreetCategory,
            CenterOfPopulationNames,
            CenterOfPopulationSatuses,
            RoadCategories,
            Regions,
            RoadNames,
            RoadValues,            
            AccidentSchemes,
            PlanElements,
            EngineeringStructures,
            CoverTypes,
            RoadStates,
            LightTypes,
            WhetherTypes,
            RoadConditions,
            
            VehicleEscapeType,
            VehicleType,
            Color,
            Malfunctions,
            FactoryCode,
            ModelCode,
            WheelAndDrive,
            DamagePlaces,
            RegistrationRegion,
            OrganizationType,
            OwnershipType,
            OrganizationName,
            HaveLicence,
        
            Escape,            
            Gender,            
            SocialType,
            ConsequencesType,
            Nation,
            ViolationsOfTrafficLaw,
        
            LastCategory
        };
        public static string[] CateroryNames = { "Категория участника ДТП",
                                                 "Вид ДТП",
                                                 "Вид операции",
                                                 "Улица",
                                                 "Категория улицы",
                                                 "Населенный пункт",
                                                 "Статус населенного пункта",
                                                 "Категория дороги",
                                                 "Регион",
                                                 "Дорога",
                                                 "Значение дороги",                                                 
                                                 "Схема ДТП",
                                                 "Элементы плана",
                                                 "Сооружения и инженерные устройства дороги",
                                                 "Вид покрытия",
                                                 "Состояние проезжей части",
                                                 "Освещение",
                                                 "Состояние погоды",
                                                 "Дорожные условия, сопутствующие совершению ДТП",

                                                 "ТС скрылось с места ДТП",
                                                 "Тип ТС",
                                                 "Цвет (группа цвета)",
                                                 "Технические неисправности",
                                                 "Код завода изготовителя",
                                                 "Марка модель",
                                                 "Расположение руля и тип привода",
                                                 "Места наибольшего повреждения ТС",
                                                 "Регион регистрации",
                                                 "Орг.-правовая форма хоз. субъекта",
                                                 "Форма собственности",
                                                 "Предприятие, организация",
                                                 "Наличие лицензии",

                                                 "Скрылся с места ДТП",
                                                 "Пол",
                                                 "Социальная характеристика",
                                                 "Степень тяжести последствий ДТП",
                                                 "Страна гражданства",
                                                 "Нарушения ПДД водителем",

                                                 ""};

        /** @fn DataTable GetElementsByCategory(int category)
         * @brief Получить список элементов словаря по категории
         * @param[in] category - Идентификатор категории         
         * @return Возвращает список элементов словаря по указанной категории
         */
        public static DataTable GetElementsByCategory(int category)
        {
            var result = new DataTable("DictionaryElements");
            dbServices.Connect();
            var sqlAdapter = new SqlDataAdapter("GetDictionaryElementsByCategory", dbServices.SqlConn);
            sqlAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
            sqlAdapter.SelectCommand.Parameters.Add("@p_category", SqlDbType.Int, 4);
            sqlAdapter.SelectCommand.Parameters["@p_category"].Value = category;            
            try
            {
                sqlAdapter.Fill(result);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                sqlAdapter.Dispose();
                dbServices.Close();
            }
            return result;
        }

        /** @fn AddDictElement(int categoryId, int elementOrder, string description )
         * @brief Добавить элемент в словарь
         * @param[in] categoryId - категория
         * @param[in] elementOrder - код элемента
         * @param[in] description - значение         
         */
        public static int AddDictElement(int categoryId, int elementOrder, string description )
        {
            dbServices.Connect();
            var sqlCmd = new SqlCommand("AddDictionaryElement", dbServices.SqlConn);
            sqlCmd.CommandType = CommandType.StoredProcedure;
            sqlCmd.Parameters.Add("@p_category", SqlDbType.Int, 4);
            sqlCmd.Parameters.Add("@p_order", SqlDbType.Int, 4);
            sqlCmd.Parameters.Add("@p_value", SqlDbType.NVarChar, 256);

            sqlCmd.Parameters["@p_category"].Value = categoryId;
            sqlCmd.Parameters["@p_order"].Value = elementOrder;
            sqlCmd.Parameters["@p_value"].Value = description;

            try
            {
                sqlCmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return -1;
            }
            finally
            {
                sqlCmd.Dispose();
                dbServices.Close();
            }
            return 0;
        }

        public static void LoadComboBoxValues(ComboBox cb, DictCategories category)
        {
            cb.Items.Clear();
            DataTable elementsList;

            elementsList = GetElementsByCategory(Convert.ToInt32(category));
            cb.DataSource = elementsList;
            cb.DisplayMember = "Description";
            cb.ValueMember = "ID";
        }
    }
}
